home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / taropyon / cci / install.cci < prev    next >
Text File  |  1993-11-30  |  8KB  |  274 lines

  1. /*************************************************************************
  2. *    インストールプログラム
  3. *************************************************************************/
  4.  
  5. #include    "ccilib.h"
  6.  
  7. /*    パレットデータ(HEwin 配色)    */
  8. char    PltDat[3][16] =
  9. {
  10.     /* G R  B                                */
  11.     { 0, 0, 0},    /* C_BALCK, C_THROUGH        */
  12.     { 0, 0, 0},    /* C_BLUE , C_MBLACK         */
  13.     { 7, 7, 8},    /* C_RED                    */
  14.     {12,12,13},    /* C_MAGENTA                */
  15.     { 6, 5, 7},    /* C_GREEN                    */
  16.     { 8, 7, 9},    /* C_CYAN                    */
  17.     {10, 9,11},    /* C_YELLOW                    */
  18.     {11,11,12},    /* C_WHITE                    */
  19.  
  20.     { 5, 5, 6},    /* C_HBALCK                    */
  21.     { 0, 0,11},    /* C_HBLUE                    */
  22.     { 0,11, 0},    /* C_HRED                    */
  23.     { 0,11,11},    /* C_HMAGENTA                */
  24.     {11, 0, 0},    /* C_HGEEN                    */
  25.     {11, 0,11},    /* C_HCYAN                    */
  26.     {11,11, 0},    /* C_HYELLOW                */
  27.     {14,14,15}    /* C_HWHITE                    */
  28. };
  29.  
  30. /*************************************************************************
  31. *    初期化
  32. *************************************************************************/
  33.  
  34. int        init()
  35. {
  36.     DSP_sysInit(0);            /* 表示システム初期化        */
  37.     KBF_sysInit();            /* キーボードシステム初期化    */
  38.     KBF_kan_off();
  39.     FDL_sysInit();            /* ファイルダイアログ初期化    */
  40.  
  41.     sdk_control(0);            /* サイドワーク起動禁止    */
  42.     DSP_setPlt( PltDat );    /* パレット設定            */
  43.  
  44.     DSP_writePage(1);
  45.     DSP_title("INSTALL","0.99",15,7,0,0);
  46.     evt_setDspTime( 1, 432, 4, 7, 0 );    /* 時刻表示アイドリング処理設定    */
  47.     SYL_clear();
  48. }
  49.  
  50. /*************************************************************************
  51. *    終了
  52. *************************************************************************/
  53.  
  54. int        term()
  55. {
  56.     FDL_sysEnd();
  57.     KBF_sysEnd();
  58.     DSP_sysEnd();
  59. }
  60.  
  61. char    *AplName = "CCI";    /* インストールするアプリの名前    */
  62. char    *NewDir  = "CCI";    /* 作成するディレクトリの名前    */
  63. char    StartPath[256];
  64. char    ItmPath[256];        /* アイテムファイル                */
  65.  
  66. char    *File1[3] =            /* インストールするファイル        */
  67. {
  68.     "cci.exp",    /* 実行プログラム    */
  69.     "cci.man",    /* 説明ファイル        */
  70.     NULL
  71. };
  72.  
  73. #define    FRM_X1(_frm)    _frm[0]
  74. #define    FRM_Y1(_frm)    _frm[1]
  75. #define    FRM_X2(_frm)    _frm[2]
  76. #define    FRM_Y2(_frm)    _frm[3]
  77.  
  78. int        item_set_newpos( short *newfrm )
  79. {
  80.     int            ret;
  81.     int            fpos, nextFPos;
  82.     int            etyNum;
  83.     short        icnNum;
  84.     char        ttlStr[128];
  85.     char        pathStr[128];
  86.     char        paraStr[128];
  87.     int            atrInf;
  88.     int            nextFPos;
  89.     short        frm[4];
  90.  
  91.     fpos = 0;
  92.     FRM_X1(newfrm) = 0;
  93.     FRM_Y1(newfrm) = 0;
  94.     FRM_X2(newfrm) = 0;
  95.     FRM_Y2(newfrm) = 0;
  96.     while ( (fpos = ITM_GetPhysclNextFPos( ItmPath, fpos )) > 0 )
  97.     {
  98.         if ( ITM_GetStair( ItmPath, fpos ) == 0 )
  99.         {    /* ルートのみ    */
  100.             ret = ITM_GetItmType(ItmPath,fpos);
  101.             switch ( ret )
  102.             {
  103.                 case 1:    /* group */
  104.                     ITM_GetGrpData(ItmPath,fpos,&etyNum,&icnNum,ttlStr,&nextFPos,frm);
  105.                     break;
  106.                 case 2:    /* apllication */
  107.                     ITM_GetAplData(ItmPath,fpos,&icnNum,ttlStr,pathStr,paraStr,atrInf,frm);
  108.                     break;
  109.             }
  110.             if ( FRM_X1(newfrm) < FRM_X2(frm) )
  111.                 FRM_X1(newfrm) = FRM_X2(frm);
  112.             if ( FRM_Y1(newfrm) < FRM_Y2(frm) )
  113.                 FRM_Y1(newfrm) = FRM_Y2(frm);
  114.         }
  115.     }
  116.     FRM_Y1(newfrm) = FRM_Y1(newfrm) + 15;
  117.     FRM_X2(newfrm) = FRM_X1(newfrm) + 24;
  118.     FRM_Y2(newfrm) = FRM_Y1(newfrm) + 24;
  119.  
  120.     if ( FRM_X2(newfrm) > 621 )
  121.     {
  122.         FRM_X2(newfrm) = 621;
  123.         FRM_X1(newfrm) = FRM_X2(newfrm) - 24;
  124.     }
  125.     if ( FRM_Y2(newfrm) > 410 )
  126.     {
  127.         FRM_Y2(newfrm) = 410;
  128.         FRM_Y1(newfrm) = FRM_Y2(newfrm) - 24;
  129.     }
  130. }
  131.  
  132.  
  133. /*************************************************************************
  134. *    インストール
  135. *************************************************************************/
  136.  
  137. int        install()
  138. {
  139.     int        i, ret, len;
  140.     char    *btn;
  141.     char    *fdl;
  142.     int        drv;
  143.     char    *p, tmp[256], path[256], whare[256], src[256], dst[256];
  144.     short    frm[4];
  145.  
  146. _RETRY:
  147.     btn = MNU_allocBtn( 2 );
  148.     MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "INSTALL : [実行]" );
  149.     MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  150.     ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
  151.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT, 2, btn,
  152.         "    %s のインストールを行いますか?  ", AplName );
  153.     MNU_freeBtn( btn );
  154.     if ( ret != 1 )
  155.         return (0);
  156.  
  157.     DLG_tmpMsgTime( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  158.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  159.         3, "\n    インストール先に移動してください。  \n" );
  160.  
  161.     /* インストール    */
  162.     if ( (fdl = FDL_open(0)) == NULL )
  163.         return (-1);
  164.     FDL_set_title( fdl,"インストール先指定");
  165.     FDL_set_wildcard( fdl, "*.*");
  166.     ret = FDL_start(fdl);
  167.     if ( ret == NORMAL )
  168.     {
  169.         drv = FDL_get_drv(fdl);
  170.         strcpy( whare, FDL_get_whare(fdl) );
  171.     }
  172.     FDL_close(fdl);
  173.     if ( ret )
  174.         goto _RETRY;
  175.  
  176.     sprintf( tmp, "%c:/%s", drv+'A', whare );
  177.     len = strlen(tmp);
  178.     if ( len > 0 && tmp[len-1] != '/' && tmp[len-1] != '\\' )
  179.     {
  180.         tmp[len++] = '/';
  181.         tmp[len]   = '\0';
  182.     }
  183.     sprintf( path, "%s%s", tmp, NewDir);
  184.  
  185.     ret = FS_isFileExist(path);
  186.     if ( ret == 0 )
  187.     {    /* ファイルは存在しない    */
  188.         /* ディレクトリ作成確認    */
  189.         btn = MNU_allocBtn( 2 );
  190.         MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "MKDIR : [実行]" );
  191.         MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  192.         ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
  193.             C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
  194.             "    インストール先にディレクトリを作成します。  \n%s", path );
  195.         MNU_freeBtn( btn );
  196.         if ( ret != 1 )
  197.             goto _RETRY;
  198.         FS_mkdir(path);
  199.     } else if ( ret == 1 )
  200.     {    /* ファイルが存在    */
  201.         MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  202.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
  203.             "    %s    \n    インストール先に同名のファイルが存在しています。  ", path );
  204.         goto _RETRY;
  205.     }
  206.  
  207.     /* インストール先確認    --------------------------------------------*/
  208.     btn = MNU_allocBtn( 2 );
  209.     MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "INSTALL : [実行]" );
  210.     MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  211.     ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
  212.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
  213.         "  インストール先 : %s  \n    インストールを行いますか?  ", path );
  214.     MNU_freeBtn( btn );
  215.     if ( ret != 1 )
  216.         goto _RETRY;
  217.  
  218.     /* ファイルの複写    ------------------------------------------------*/
  219.     ret = i = 0;
  220.     while ( (p = File1[i++]) != NULL && ret == 0 )
  221.     {
  222.         SYL_puts( C_INFO, "copy %s", p );
  223.         sprintf( src, "%s%s", StartPath, p );
  224.         ret = FileCopy2( src, path, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN );
  225.     }
  226.  
  227.     if ( ret )
  228.     {    /* error */
  229.         MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  230.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
  231.             "FILE COPY ERROR\n    インストールに失敗しました。  " );
  232.         return (-1);
  233.     }
  234.  
  235.     /* アイテム登録        ------------------------------------------------*/
  236.     SYL_puts( C_INFO, "アイテム登録を行います。" );
  237.     sprintf( ItmPath, "%c:\\tmenu.itm", drv+'A');
  238.     if ( FS_isFileExist(ItmPath) == 0 )
  239.     {    /* アイテムファイルま作成    */
  240.         ITM_CreateItemFile(ItmPath);
  241.     }
  242.     item_set_newpos( frm );
  243.  
  244.     sprintf( tmp, "%s/%s", path, File1[0]);
  245.     FS_unix2dos( dst, tmp );
  246.     ITM_AddAplItem( ItmPath, 0, 1024, AplName, dst, "", 0, frm );
  247.  
  248.     SYL_puts( C_INFO, "***** Completed *****");
  249.     DLG_tmpMsgTime( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  250.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  251.         3, "    インストール終了しました。  " );
  252.  
  253.     return (0);
  254. }
  255.  
  256. /*************************************************************************
  257. *    MAIN
  258. *************************************************************************/
  259.  
  260. int        main( int argc, char **argv )
  261. {
  262.     char    tmp[256];
  263.  
  264.     init();
  265.  
  266.     FS_setFullPathname( tmp, argv[0] );
  267.     FS_getDnam( StartPath, tmp );
  268.  
  269.     install();
  270.  
  271.     term();
  272.     return (0);
  273. }
  274.